默认插槽和具名插槽这里就不多说了,大家直接去看官网的例子就好插槽,我们来说说 2.1.0+ 新增的比较难理解的作用域插槽。
官网例子
有的时候你希望提供的组件带有一个可从子组件获取数据的可复用的插槽。例如一个简单的
1 | <ul> |
但是在我们应用的某些部分,我们希望每个独立的待办项渲染出和todo.text
不太一样的东西。这也是作用域插槽的用武之地。
为了让这个特性成为可能,你需要做的全部事情就是将待办项内容包裹在一个
1 | <ul> |
现在当我们使用
1 | <todo-list v-bind:todos="todos"> |
注意:在 2.5.0+,slot-scope 不再限制在 元素上使用,而可以用在插槽内的任何元素或组件上。
自己的理解
我对官网例子的理解是:子组件从数据源中获取数据,然后再回传一份数据给父组件来做样式层面的渲染:
对此我写了一个简单的小例子是这样的:
1 |
|
子组件在 slot 中通过 v-for 遍历数据,并把 item 回传给父组件,父组件通过 slot-scope 自定义一个属性接受子组件回传的数据对象。
到这里,大家可能会有一个疑问:正常不是应该父组件获取数据后,再交给子组件来渲染的吗?
我个人的理解是:为了使用起来更加灵活。比如你写了一个弹窗组件,发布后,你的使用者想自定义弹窗部分的内容或样式,比如自己定义标题和多个按钮等 dom 结构以及相关样式。此时,你可能就需要使用这个功能了。
是不是感觉比看完官网的更清楚一些了?
完~